/**
@file     	DESIGNPATTERN_Facade.h
@brief    	To ensure that a class has only one instance
@author  	arvin
@version 	1.0   2012/12/12
*/

#ifndef CXX_DESIGNPATTERN_FACADE_H
#define CXX_DESIGNPATTERN_FACADE_H

#ifndef CXX_DESIGNPATTERN_SUBSYSTEM1_H
#include "DESIGNPATTERN_SubSystem1.h"
#endif

#ifndef CXX_DESIGNPATTERN_SUBSYSTEM2_H
#include "DESIGNPATTERN_SubSystem2.h"
#endif

class Facade
{
public:
	/**
	* Destruction
	*
	* @param VOID
	* @return
	*/
	~Facade();

	/**
	* Instance
	*
	* @param VOID
	* @return Facade*
	* @note singleton
	*/
	static Facade* Instance();

	/**
	* Destroy
	*
	* @param VOID
	* @return VOID
	* @note singleton
	*/
	static VOID Destroy();

	/**
	* OperationWrapper
	*
	* @param VOID
	* @return VOID
	* @note
	*/
	VOID OperationWrapper();
protected:
private:
	/**
	* Construction
	*
	* @param VOID
	* @return
	*/
	Facade();

	/**
	* Copy Construction
	*
	* @param const Facade& cFacade
	* @return
	*/
	Facade(const Facade& cFacade);

	/**
	* Assignment
	*
	* @param const Facade& cFacade
	* @return Facade&
	*/
	Facade& operator=(const Facade& cFacade);

public:
protected:
private:
	static Facade* m_pInstance;
	SubSystem1 m_cSubSystem1;
	SubSystem2 m_cSubSystem2;
};
#endif	/* >>CXX_DESIGNPATTERN_FACADE_H<< */
/* EOF */